#region Copyright and license information
// Copyright 2001-2009 Stephen Colebourne
// Copyright 2009-2011 Jon Skeet
// 
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// 
//     http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#endregion
#region usings
using System;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
using NodaTime.Xml;
#endregion

namespace NodaTime
{
    [XmlSchemaProvider("GetSchema")]
    public partial struct Instant : IXmlSerializable
    {

        XmlSchema IXmlSerializable.GetSchema()
        {
            return null;
        }

        void IXmlSerializable.ReadXml(XmlReader reader)
        {
            this.ticks = reader.ReadElementContentAsInstant().Ticks;
        }

        void IXmlSerializable.WriteXml(XmlWriter writer)
        {
            writer.WriteString(NodaXmlConvert.ToString(this));
        }

        /// <summary>
        ///   Adds the Noda Time <see cref="NodaTimeSchema.Schema"/> to the specified <see cref="XmlSchemaSet"/>.
        /// </summary>
        /// <param name="schemas">
        ///   The <see cref="XmlSchemaSet"/> used for serialisation.
        /// </param>
        /// <returns>
        ///   The <see cref="XmlQualifiedName"/> for this object's XML datatype.
        /// </returns>
        public static XmlQualifiedName GetSchema(XmlSchemaSet schemas)
        {
            schemas.Add(NodaTimeSchema.Schema);
            return NodaTimeSchema.InstantTypeName;
        }
    }
}
